/*
 * RT-Thread Secure
 *
 * Copyright (c) 2021, Shanghai Real-Thread Electronic Technology Co., Ltd.
 *
 * All rights reserved.
 */
#ifndef __RK3568_IOMUX_H__
#define __RK3568_IOMUX_H__

enum gpio_port
{
    GPIO_PORT_0 = 0,
    GPIO_PORT_1,
    GPIO_PORT_2,
    GPIO_PORT_3,
    GPIO_PORT_4,
    GPIO_PORT_NUM,
};
typedef int gpio_port_t;

/* IO pin */
enum gpio_pin
{
    GPIO_PIN_A = 0,
    GPIO_PIN_B,
    GPIO_PIN_C,
    GPIO_PIN_D,
    GPIO_PIN_NUM,
};
typedef int gpio_pin_t;

/* IO index */
enum gpio_index
{
    GPIO_INDEX_0 = 0,
    GPIO_INDEX_1,
    GPIO_INDEX_2,
    GPIO_INDEX_3,
    GPIO_INDEX_4,
    GPIO_INDEX_5,
    GPIO_INDEX_6,
    GPIO_INDEX_7,
    GPIO_INDEX_NUM,
};
typedef int gpio_index_t;

enum gpio_pull_mode
{
    GRF_PULL_MODE_Z = 0,
    GRF_PULL_MODE_PULL_UP = 1,
    GRF_PULL_MODE_PULL_DOWN = 2,
    GRF_PULL_MODE_BUS_KEEPER = 3
};
typedef int gpio_pull_mode_t;

enum gpio_drv_level
{
    GRF_DRV_LEVEL_DIS = 0,
    GRF_DRV_LEVEL_0 = 1,
    GRF_DRV_LEVEL_1 = 3,
    GRF_DRV_LEVEL_2 = 7,
    GRF_DRV_LEVEL_3 = 15,
    GRF_DRV_LEVEL_4 = 31,
    GRF_DRV_LEVEL_5 = 63,
};
typedef int gpio_drv_level_t;

enum gpio_speed
{
    GRF_SPEED_LEVEL0 = 0,
    GRF_SPEED_LEVEL1 = 1,
    GRF_SPEED_LEVEL2 = 2,
    GRF_SPEED_LEVEL3 = 3,
};
typedef int gpio_speed_t;

/* 施密特触发器 */
enum gpio_schmitt_trigger
{
    GRF_SMT_DISABLE = 0,
    GRF_SMT_NO_HYSTERESIS,
    GRF_SMT_SCHMITT_TRIGGER_ENABLED,
    GRF_SMT_RESERVED,
};
typedef int gpio_schmitt_trigger_t;

enum gpio_od_mode
{
    GRF_OD_MODE_DIS = 0,
    GRF_OD_MODE_EN,
};
typedef int gpio_od_mode_t;

enum gpio_iomux_sel
{
    IOMUX_SEL_GPIO = 0,

    /* GPIO0_A0-7 */
    IOMUX_SEL_0A0_REFCLK_OU = 1,
    IOMUX_SEL_0A1_TSADC_SHUTM0 = 1,
    IOMUX_SEL_0A1_TSADC_SHUTORG = 2,
    IOMUX_SEL_0A2_PMIC_SLEEP = 1,
    IOMUX_SEL_0A2_TSADC_SHUTM1 = 2,
    IOMUX_SEL_0A4_SDMMC0_DET = 1,
    IOMUX_SEL_0A4_SATA_CPDET = 2,
    IOMUX_SEL_0A4_PCIE30X1_CLKREQNM0 = 3,
    IOMUX_SEL_0A5_SDMMC0_PWREN = 1,
    IOMUX_SEL_0A5_SATA_MPSWITCH = 2,
    IOMUX_SEL_0A5_PCIE20_CLKREQNM0 = 3,
    IOMUX_SEL_0A5_PMU_DEBUG0 = 4,
    IOMUX_SEL_0A6_SATA_CPPOD = 1,
    IOMUX_SEL_0A6_PCIE30X2_CLKREQNM0 = 2,
    IOMUX_SEL_0A6_PMU_DEBUG1 = 3,
    IOMUX_SEL_0A6_GPU_PWREN = 4,
    IOMUX_SEL_0A7_FLASH_VOLSEL = 1,

    /* GPIO0_B0-7 */
    IOMUX_SEL_0B0_CLK32K_IN = 1,
    IOMUX_SEL_0B0_CLK32K_OUT0 = 2,
    IOMUX_SEL_0B0_PCIE30X2_BUTTONRSTN = 3,
    IOMUX_SEL_0B1_I2C0_SCL = 1,
    IOMUX_SEL_0B2_I2C0_SDA = 1,
    IOMUX_SEL_0B3_I2C1_SCL = 1,
    IOMUX_SEL_0B3_CAN0_TXM0 = 2,
    IOMUX_SEL_0B3_PCIE30X1_BUTTONRSTN = 3,
    IOMUX_SEL_0B3_MCU_JTAGTDO = 4,
    IOMUX_SEL_0B4_I2C1_SDA = 1,
    IOMUX_SEL_0B4_CAN0_RXM0 = 2,
    IOMUX_SEL_0B4_PCIE20_BUTTONRSTN = 3,
    IOMUX_SEL_0B4_MCU_JTAGTCK = 4,
    IOMUX_SEL_0B5_I2C2_SCLM0 = 1,
    IOMUX_SEL_0B5_SPI0_CLKM0 = 2,
    IOMUX_SEL_0B5_PCIE20_WAKENM0 = 3,
    IOMUX_SEL_0B5_PWM1_M1 = 4,
    IOMUX_SEL_0B6_I2C2_SDAM0 = 1,
    IOMUX_SEL_0B6_SPI0_MOSIM0 = 2,
    IOMUX_SEL_0B6_PCIE20_PERSTNM0 = 3,
    IOMUX_SEL_0B6_PWM2_M1 = 4,
    IOMUX_SEL_0B7_PWM0_M0 = 1,
    IOMUX_SEL_0B7_CPU_AVS = 2,

    /* GPIO0_C0-7 */
    IOMUX_SEL_0C0_PWM1_M0 = 1,
    IOMUX_SEL_0C0_GPU_AVS = 2,
    IOMUX_SEL_0C0_UART0_RX = 3,
    IOMUX_SEL_0C1_PWM2_M0 = 1,
    IOMUX_SEL_0C1_NPU_AVS = 2,
    IOMUX_SEL_0C1_UART0_TX = 3,
    IOMUX_SEL_0C1_MCU_JTAGTDI = 4,
    IOMUX_SEL_0C2_PWM3 = 1,
    IOMUX_SEL_0C2_EDPDP_HPDINM1 = 2,
    IOMUX_SEL_0C2_PCIE30X1_WAKENM0 = 3,
    IOMUX_SEL_0C2_MCU_JTAGTMS = 4,
    IOMUX_SEL_0C3_PWM4 = 1,
    IOMUX_SEL_0C3_VOP_PWMM0 = 2,
    IOMUX_SEL_0C3_PCIE30X1_PERSTNM0 = 3,
    IOMUX_SEL_0C3_MCU_JTAGTRSTN = 4,
    IOMUX_SEL_0C4_PWM5 = 1,
    IOMUX_SEL_0C4_SPI0_CS1M0 = 2,
    IOMUX_SEL_0C4_UART0_RTSN = 3,
    IOMUX_SEL_0C4_PMU_DEBUG2 = 4,
    IOMUX_SEL_0C5_PWM6 = 1,
    IOMUX_SEL_0C5_SPI0_MISOM0 = 2,
    IOMUX_SEL_0C5_PCIE30X2_WAKENM0 = 3,
    IOMUX_SEL_0C5_PMU_DEBUG3 = 4,
    IOMUX_SEL_0C6_PWM7 = 1,
    IOMUX_SEL_0C6_SPI0_CS0M0 = 2,
    IOMUX_SEL_0C6_PCIE30X2_PERSTNM0 = 3,
    IOMUX_SEL_0C6_PMU_DEBUG4 = 4,
    IOMUX_SEL_0C7_HDMITX_CECM1 = 1,
    IOMUX_SEL_0C7_PWM0_M1 = 2,
    IOMUX_SEL_0C7_UART0_CTSN = 3,
    IOMUX_SEL_0C7_PMU_DEBUG5 = 4,

    /* GPIO0_D0-6 */
    IOMUX_SEL_0D0_UART2_RXM0 = 1,
    IOMUX_SEL_0D1_UART2_TXM0 = 1,

    /* GPIO1_A0-7 */
    IOMUX_SEL_1A0_I2C3_SDAM0 = 1,
    IOMUX_SEL_1A0_UART3_RXM0 = 2,
    IOMUX_SEL_1A0_CAN1_RXM0 = 3,
    IOMUX_SEL_1A0_AUDIOpwmLOUT = 4,
    IOMUX_SEL_1A0_ACODEC_ADCDATA = 5,
    IOMUX_SEL_1A0_AUDIOpwmLOUTP = 6,
    IOMUX_SEL_1A1_I2C3_SCLM0 = 1,
    IOMUX_SEL_1A1_UART3_TXM0 = 2,
    IOMUX_SEL_1A1_CAN1_TXM0 = 3,
    IOMUX_SEL_1A1_AUDIOpwmROUT = 4,
    IOMUX_SEL_1A1_ACODEC_ADCCLK = 5,
    IOMUX_SEL_1A1_AUDIOpwmLOUTN = 6,
    IOMUX_SEL_1A2_I2S1_MCLKM0 = 1,
    IOMUX_SEL_1A2_UART3_RTSNM0 = 2,
    IOMUX_SEL_1A2_SCR_CLK = 3,
    IOMUX_SEL_1A2_PCIE30X1_PERSTNM2 = 4,
    IOMUX_SEL_1A3_I2S1_SCLKTXM0 = 1,
    IOMUX_SEL_1A3_UART3_CTSNM0 = 2,
    IOMUX_SEL_1A3_SCR_IO = 3,
    IOMUX_SEL_1A3_PCIE30X1_WAKENM2 = 4,
    IOMUX_SEL_1A3_ACODEC_DACCLK = 5,
    IOMUX_SEL_1A4_I2S1_SCLKRXM0 = 1,
    IOMUX_SEL_1A4_UART4_RXM0 = 2,
    IOMUX_SEL_1A4_PDM_CLK1M0 = 3,
    IOMUX_SEL_1A4_SPDIF_TXM0 = 4,
    IOMUX_SEL_1A5_I2S1_LRCKTXM0 = 1,
    IOMUX_SEL_1A5_UART4_RTSNM0 = 2,
    IOMUX_SEL_1A5_SCR_RST = 3,
    IOMUX_SEL_1A5_PCIE30X1_CLKREQNM2 = 4,
    IOMUX_SEL_1A5_ACODEC_DACSYNC = 5,
    IOMUX_SEL_1A6_I2S1_LRCKRXM0 = 1,
    IOMUX_SEL_1A6_UART4_TXM0 = 2,
    IOMUX_SEL_1A6_PDM_CLK0M0 = 3,
    IOMUX_SEL_1A6_AUDIOpwmROUTP = 4,
    IOMUX_SEL_1A7_I2S1_SDO0M0 =  1,
    IOMUX_SEL_1A7_UART4_CTSNM0 = 2,
    IOMUX_SEL_1A7_SCR_DET = 3,
    IOMUX_SEL_1A7_AUDIOpwmROUTN = 4,
    IOMUX_SEL_1A7_ACODEC_DAC_DATAL = 5,

    /* GPIO1_B0-7 */
    IOMUX_SEL_1B0_I2S1_SDO1M0 = 1,
    IOMUX_SEL_1B0_I2S1_SDI3M0 = 2,
    IOMUX_SEL_1B0_PDM_SDI3M0 = 3,
    IOMUX_SEL_1B0_PCIE20_CLKREQNM2 = 4,
    IOMUX_SEL_1B0_ACODEC_DAC_DATAR = 5,
    IOMUX_SEL_1B1_I2S1_SDO2M0 = 1,
    IOMUX_SEL_1B1_I2S1_SDI2M0 = 2,
    IOMUX_SEL_1B1_PDM_SDI2M0 = 3,
    IOMUX_SEL_1B1_PCIE20_WAKENM2 = 4,
    IOMUX_SEL_1B1_ACODEC_ADC_SYNC = 5,
    IOMUX_SEL_1B2_I2S1_SDO3M0 = 1,
    IOMUX_SEL_1B2_I2S1_SDI1M0 = 2,
    IOMUX_SEL_1B2_PDM_SDI1M0 = 3,
    IOMUX_SEL_1B2_PCIE20_PERSTNM2 = 4,
    IOMUX_SEL_1B3_I2S1_SDI0M0 = 1,
    IOMUX_SEL_1B3_PDM_SDI0M0 = 2,
    IOMUX_SEL_1B4_EMMC_D0 = 1,
    IOMUX_SEL_1B4_FLASH_D0 = 2,
    IOMUX_SEL_1B5_EMMC_D1 = 1,
    IOMUX_SEL_1B5_FLASH_D1 = 2,
    IOMUX_SEL_1B6_EMMC_D2 = 1,
    IOMUX_SEL_1B6_FLASH_D2 = 2,
    IOMUX_SEL_1B7_EMMC_D3 = 1,
    IOMUX_SEL_1B7_FLASH_D3 = 2,

    /* GPIO1_C0-7 */
    IOMUX_SEL_1C0_EMMC_D4 = 1,
    IOMUX_SEL_1C0_FLASH_D4 = 2,
    IOMUX_SEL_1C1_EMMC_D5 = 1,
    IOMUX_SEL_1C1_FLASH_D5 = 2,
    IOMUX_SEL_1C2_EMMC_D6 = 1,
    IOMUX_SEL_1C2_FLASH_D6 = 2,
    IOMUX_SEL_1C3_EMMC_D7 = 1,
    IOMUX_SEL_1C3_FLASH_D7 = 2,
    IOMUX_SEL_1C4_EMMC_CMD = 1,
    IOMUX_SEL_1C4_FLASH_WRN = 2,
    IOMUX_SEL_1C5_EMMC_CLKOUT = 1,
    IOMUX_SEL_1C5_FLASH_DQS = 2,
    IOMUX_SEL_1C6_EMMC_DATASTROBE = 1,
    IOMUX_SEL_1C6_FSPI_CS1N = 2,
    IOMUX_SEL_1C6_FLASH_CLE = 3,
    IOMUX_SEL_1C7_EMMC_RSTN = 1,
    IOMUX_SEL_1C7_FSPI_D2 = 2,
    IOMUX_SEL_1C7_FLASH_WPN = 3,

    /* GPIO1_D0-7 */
    IOMUX_SEL_1D0_FSPI_CLK = 1,
    IOMUX_SEL_1D0_FLASH_ALE = 2,
    IOMUX_SEL_1D1_FSPI_D0 = 1,
    IOMUX_SEL_1D1_FLASH_RDY = 2,
    IOMUX_SEL_1D2_FSPI_D1 = 1,
    IOMUX_SEL_1D2_FLASH_RDN = 2,
    IOMUX_SEL_1D3_FSPI_CS0N = 1,
    IOMUX_SEL_1D3_FLASH_CS0N = 2,
    IOMUX_SEL_1D4_FSPI_D3 = 1,
    IOMUX_SEL_1D4_FLASH_CS1N = 2,
    IOMUX_SEL_1D5_SDMMC0_D0 = 1,
    IOMUX_SEL_1D5_UART2_TXM1 = 2,
    IOMUX_SEL_1D5_UART6_TXM1 = 3,
    IOMUX_SEL_1D5_PWM8_M1 = 4,
    IOMUX_SEL_1D6_SDMMC0_D1 = 1,
    IOMUX_SEL_1D6_UART2_RXM1 = 2,
    IOMUX_SEL_1D6_UART6_RXM1 = 3,
    IOMUX_SEL_1D6_PWM9_M1 = 4,
    IOMUX_SEL_1D7_SDMMC0_D2 = 1,
    IOMUX_SEL_1D7_JTAG_TCK = 2,
    IOMUX_SEL_1D7_UART5_CTSNM0 = 3,

    /* GPIO2_A0-7 */
    IOMUX_SEL_2A0_SDMMC0_D3 = 1,
    IOMUX_SEL_2A0_JTAG_TMS = 2,
    IOMUX_SEL_2A0_UART5_RTSNM0 = 3,
    IOMUX_SEL_2A1_SDMMC0_CMD = 1,
    IOMUX_SEL_2A1_PWM10_M1 = 2,
    IOMUX_SEL_2A1_UART5_RXM0 = 3,
    IOMUX_SEL_2A1_CAN0_TXM1 = 4,
    IOMUX_SEL_2A2_SDMMC0_CLK = 1,
    IOMUX_SEL_2A2_TEST_CLKOUT = 2,
    IOMUX_SEL_2A2_UART5_TXM0 = 3,
    IOMUX_SEL_2A2_CAN0_RXM1 = 4,
    IOMUX_SEL_2A3_SDMMC1_D0 = 1,
    IOMUX_SEL_2A3_GMAC0_RXD2 = 2,
    IOMUX_SEL_2A3_UART6_RXM0 = 3,
    IOMUX_SEL_2A4_SDMMC1_D1 = 1,
    IOMUX_SEL_2A4_GMAC0_RXD3 = 2,
    IOMUX_SEL_2A4_UART6_TXM0 = 3,
    IOMUX_SEL_2A5_SDMMC1_D2 = 1,
    IOMUX_SEL_2A5_GMAC0_RXCLK = 2,
    IOMUX_SEL_2A5_UART7_RXM0 = 3,
    IOMUX_SEL_2A6_SDMMC1_D3 = 1,
    IOMUX_SEL_2A6_GMAC0_TXD2 = 2,
    IOMUX_SEL_2A6_UART7_TXM0 = 3,
    IOMUX_SEL_2A7_SDMMC1_CMD = 1,
    IOMUX_SEL_2A7_GMAC0_TXD3 = 2,
    IOMUX_SEL_2A7_UART9_RXM0 = 3,

    /* GPIO2_B0-7 */
    IOMUX_SEL_2B0_SDMMC1_CLK = 1,
    IOMUX_SEL_2B0_GMAC0_TXCLK = 2,
    IOMUX_SEL_2B0_UART9_TXM0 = 3,
    IOMUX_SEL_2B1_SDMMC1_PWREN = 1,
    IOMUX_SEL_2B1_I2C4_SDAM1 = 2,
    IOMUX_SEL_2B1_UART8_RTSNM0 = 3,
    IOMUX_SEL_2B1_CAN2_RXM1 = 4,
    IOMUX_SEL_2B2_SDMMC1_DET = 1,
    IOMUX_SEL_2B2_I2C4_SCLM1 = 2,
    IOMUX_SEL_2B2_UART8_CTSNM0 = 3,
    IOMUX_SEL_2B2_CAN2_TXM1 = 4,
    IOMUX_SEL_2B3_GMAC0_TXD0 = 1,
    IOMUX_SEL_2B3_UART1_RXM0 = 2,
    IOMUX_SEL_2B4_GMAC0_TXD1 = 1,
    IOMUX_SEL_2B4_UART1_TXM0 = 2,
    IOMUX_SEL_2B5_GMAC0_TXEN = 1,
    IOMUX_SEL_2B5_UART1_RTSNM0 = 2,
    IOMUX_SEL_2B5_SPI1_CLKM0 = 3,
    IOMUX_SEL_2B6_GMAC0_RXD0 = 1,
    IOMUX_SEL_2B6_UART1_CTSNM0 = 2,
    IOMUX_SEL_2B6_SPI1_MISOM0 = 3,
    IOMUX_SEL_2B7_I2S2_SCLKRXM0 = 1,
    IOMUX_SEL_2B7_GMAC0_RXD1 = 2,
    IOMUX_SEL_2B7_UART6_RTSNM0 = 3,
    IOMUX_SEL_2B7_SPI1_MOSIM0 = 4,

    /* GPIO2_C0-6 */
    IOMUX_SEL_2C0_I2S2_LRCKRXM0 = 1,
    IOMUX_SEL_2C0_GMAC0_RXDVCRS = 2,
    IOMUX_SEL_2C0_UART6_CTSNM0 = 3,
    IOMUX_SEL_2C0_SPI1_CS0M0 = 4,
    IOMUX_SEL_2C1_I2S2_MCLKM0 = 1,
    IOMUX_SEL_2C1_ETH0_REFCLKO25M = 2,
    IOMUX_SEL_2C1_UART7_RTSNM0 = 3,
    IOMUX_SEL_2C1_SPI2_CLKM0 = 4,
    IOMUX_SEL_2C2_I2S2_SCLKTXM0 = 1,
    IOMUX_SEL_2C2_GMAC0_MCLKINOUT = 2,
    IOMUX_SEL_2C2_UART7_CTSNM0 = 3,
    IOMUX_SEL_2C2_SPI2_MISOM0 = 4,
    IOMUX_SEL_2C3_I2S2_LRCKTXM0 = 1,
    IOMUX_SEL_2C3_GMAC0_MDC = 2,
    IOMUX_SEL_2C3_UART9_RTSNM0 = 3,
    IOMUX_SEL_2C3_SPI2_MOSIM0 =  4,
    IOMUX_SEL_2C4_I2S2_SDOM0 = 1,
    IOMUX_SEL_2C4_GMAC0_MDIO = 2,
    IOMUX_SEL_2C4_UART9_CTSNM0 = 3,
    IOMUX_SEL_2C4_SPI2_CS0M0 = 4,
    IOMUX_SEL_2C5_I2S2_SDIM0 = 1,
    IOMUX_SEL_2C5_GMAC0_RXER = 2,
    IOMUX_SEL_2C5_UART8_TXM0 = 3,
    IOMUX_SEL_2C5_SPI2_CS1M0 = 4,
    IOMUX_SEL_2C6_CLK32K_OUT1 = 1,
    IOMUX_SEL_2C6_UART8_RXM0 = 2,
    IOMUX_SEL_2C6_SPI1_CS1M0 = 3,

    /* GPIO2_D0-7 */
    IOMUX_SEL_2D0_LCDC_D0 = 1,
    IOMUX_SEL_2D0_BT656_D0M0 = 2,
    IOMUX_SEL_2D0_SPI0_MISOM1 = 3,
    IOMUX_SEL_2D0_PCIE20_CLKREQNM1 = 4,
    IOMUX_SEL_2D0_I2S1_MCLKM2 = 5,
    IOMUX_SEL_2D1_LCDC_D1 = 1,
    IOMUX_SEL_2D1_BT656_D1M0 = 2,
    IOMUX_SEL_2D1_SPI0_MOSIM1 = 3,
    IOMUX_SEL_2D1_PCIE20_WAKENM1 = 4,
    IOMUX_SEL_2D1_I2S1_SCLKTXM2 = 5,
    IOMUX_SEL_2D2_LCDC_D2 = 1,
    IOMUX_SEL_2D2_BT656_D2M0 = 2,
    IOMUX_SEL_2D2_SPI0_CS0M1 = 3,
    IOMUX_SEL_2D2_PCIE30X1_CLKREQNM1 = 4,
    IOMUX_SEL_2D2_I2S1_LRCKTXM2,
    IOMUX_SEL_2D3_LCDC_D3 = 1,
    IOMUX_SEL_2D3_BT656_D3M0 = 2,
    IOMUX_SEL_2D3_SPI0_CLKM1 = 3,
    IOMUX_SEL_2D3_PCIE30X1_WAKENM1 = 4,
    IOMUX_SEL_2D3_I2S1_SDI0M2 = 5,
    IOMUX_SEL_2D4_LCDC_D4 = 1,
    IOMUX_SEL_2D4_BT656_D4M0 = 2,
    IOMUX_SEL_2D4_SPI2_CS1M1 = 3,
    IOMUX_SEL_2D4_PCIE30X2_CLKREQNM1 = 4,
    IOMUX_SEL_2D4_I2S1_SDI1M2 = 5,
    IOMUX_SEL_2D5_LCDC_D5 = 1,
    IOMUX_SEL_2D5_BT656_D5M0 = 2,
    IOMUX_SEL_2D5_SPI2_CS0M1 = 3,
    IOMUX_SEL_2D5_PCIE30X2_WAKENM1 = 4,
    IOMUX_SEL_2D5_I2S1_SDI2M2 = 5,
    IOMUX_SEL_2D6_LCDC_D6 = 1,
    IOMUX_SEL_2D6_BT656_D6M0 = 2,
    IOMUX_SEL_2D6_SPI2_MOSIM1 = 3,
    IOMUX_SEL_2D6_PCIE30X2_PERSTNM1 = 4,
    IOMUX_SEL_2D6_I2S1_SDI3M2 = 5,
    IOMUX_SEL_2D7_LCDC_D7 = 1,
    IOMUX_SEL_2D7_BT656_D7M0 = 2,
    IOMUX_SEL_2D7_SPI2_MISOM1 = 3,
    IOMUX_SEL_2D7_UART8_TXM1 = 4,
    IOMUX_SEL_2D7_I2S1_SDO0M2 = 5,

    /* GPIO3_A0-7 */
    IOMUX_SEL_3A0_LCDC_CLK = 1,
    IOMUX_SEL_3A0_BT656_CLKM0 = 2,
    IOMUX_SEL_3A0_SPI2_CLKM1 = 3,
    IOMUX_SEL_3A0_UART8_RXM1 = 4,
    IOMUX_SEL_3A0_I2S1_SDO1M2 = 5,
    IOMUX_SEL_3A1_LCDC_D8 = 1,
    IOMUX_SEL_3A1_BT1120_D0 = 2,
    IOMUX_SEL_3A1_SPI1_CS0M1 = 3,
    IOMUX_SEL_3A1_PCIE30X1_PERSTNM1 = 4,
    IOMUX_SEL_3A1_SDMMC2_D0M1 = 5,
    IOMUX_SEL_3A2_LCDC_D9 = 1,
    IOMUX_SEL_3A2_BT1120_D1 = 2,
    IOMUX_SEL_3A2_GMAC1_TXD2M0 = 3,
    IOMUX_SEL_3A2_I2S3_MCLKM0 = 4,
    IOMUX_SEL_3A2_SDMMC2_D1M1 = 5,
    IOMUX_SEL_3A3_LCDC_D10 = 1,
    IOMUX_SEL_3A3_BT1120_D2 = 2,
    IOMUX_SEL_3A3_GMAC1_TXD3M0 = 3,
    IOMUX_SEL_3A3_I2S3_SCLKM0 = 4,
    IOMUX_SEL_3A3_SDMMC2_D2M1 = 5,
    IOMUX_SEL_3A4_LCDC_D11 = 1,
    IOMUX_SEL_3A4_BT1120_D3 = 2,
    IOMUX_SEL_3A4_GMAC1_RXD2M0 = 3,
    IOMUX_SEL_3A4_I2S3_LRCKM0 = 4,
    IOMUX_SEL_3A4_SDMMC2_D3M1 = 5,
    IOMUX_SEL_3A5_LCDC_D12 = 1,
    IOMUX_SEL_3A5_BT1120_D4 = 2,
    IOMUX_SEL_3A5_GMAC1_RXD3M0 = 3,
    IOMUX_SEL_3A5_I2S3_SDOM0 = 4,
    IOMUX_SEL_3A5_SDMMC2_CMDM1 = 5,
    IOMUX_SEL_3A6_LCDC_D13 = 1,
    IOMUX_SEL_3A6_BT1120_CLK = 2,
    IOMUX_SEL_3A6_GMAC1_TXCLKM0 = 3,
    IOMUX_SEL_3A6_I2S3_SDIM0 = 4,
    IOMUX_SEL_3A6_SDMMC2_CLKM1 = 5,
    IOMUX_SEL_3A7_LCDC_D14 = 1,
    IOMUX_SEL_3A7_BT1120_D5 = 2,
    IOMUX_SEL_3A7_GMAC1_RXCLKM0 = 3,
    IOMUX_SEL_3A7_SDMMC2_DETM1 = 4,

    /* GPIO3_B0-7 */
    IOMUX_SEL_3B0_LCDC_D15 = 1,
    IOMUX_SEL_3B0_BT1120_D6 = 2,
    IOMUX_SEL_3B0_ETH1_REFCLKO25MM0 = 3,
    IOMUX_SEL_3B0_SDMMC2_PWRENM1 = 4,
    IOMUX_SEL_3B1_LCDC_D16 = 1,
    IOMUX_SEL_3B1_BT1120_D7 = 2,
    IOMUX_SEL_3B1_GMAC1_RXD0M0 = 3,
    IOMUX_SEL_3B1_UART4_RXM1 = 4,
    IOMUX_SEL_3B1_PWM8_M0 = 5,
    IOMUX_SEL_3B2_LCDC_D17 = 1,
    IOMUX_SEL_3B2_BT1120_D8 = 2,
    IOMUX_SEL_3B2_GMAC1_RXD1M0 = 3,
    IOMUX_SEL_3B2_UART4_TXM1 = 4,
    IOMUX_SEL_3B2_PWM9_M0 = 5,
    IOMUX_SEL_3B3_LCDC_D18 = 1,
    IOMUX_SEL_3B3_BT1120_D9 = 2,
    IOMUX_SEL_3B3_GMAC1_RXDVCRSM0 = 3,
    IOMUX_SEL_3B3_I2C5_SCLM0 = 4,
    IOMUX_SEL_3B3_PDM_SDI0M2 = 5,
    IOMUX_SEL_3B4_LCDC_D19 = 1,
    IOMUX_SEL_3B4_BT1120_D10 = 2,
    IOMUX_SEL_3B4_GMAC1_RXERM0 = 3,
    IOMUX_SEL_3B4_I2C5_SDAM0 = 4,
    IOMUX_SEL_3B4_PDM_SDI1M2 = 5,
    IOMUX_SEL_3B5_LCDC_D20 = 1,
    IOMUX_SEL_3B5_BT1120_D11 = 2,
    IOMUX_SEL_3B5_GMAC1_TXD0M0 = 3,
    IOMUX_SEL_3B5_I2C3_SCLM1 = 4,
    IOMUX_SEL_3B5_PWM10_M0 = 5,
    IOMUX_SEL_3B6_LCDC_D21 = 1,
    IOMUX_SEL_3B6_BT1120_D12 = 2,
    IOMUX_SEL_3B6_GMAC1_TXD1M0 = 3,
    IOMUX_SEL_3B6_I2C3_SDAM1 = 4,
    IOMUX_SEL_3B6_PWM11_M0 = 5,
    IOMUX_SEL_3B7_LCDC_D22 = 1,
    IOMUX_SEL_3B7_PWM12_M0 = 2,
    IOMUX_SEL_3B7_GMAC1_TXENM0 = 3,
    IOMUX_SEL_3B7_UART3_TXM1 = 4,
    IOMUX_SEL_3B7_PDM_SDI2M2 = 5,

    /* GPIO3_C0-7 */
    IOMUX_SEL_3C0_LCDC_D23 = 1,
    IOMUX_SEL_3C0_PWM13_M0 = 2,
    IOMUX_SEL_3C0_GMAC1_MCLKINOUTM0 = 3,
    IOMUX_SEL_3C0_UART3_RXM1 = 4,
    IOMUX_SEL_3C0_PDM_SDI3M2 = 5,
    IOMUX_SEL_3C1_LCDC_HSYNC = 1,
    IOMUX_SEL_3C1_BT1120_D13 = 2,
    IOMUX_SEL_3C1_SPI1_MOSIM1 = 3,
    IOMUX_SEL_3C1_PCIE20_PERSTNM1 = 4,
    IOMUX_SEL_3C1_I2S1_SDO2M2 = 5,
    IOMUX_SEL_3C2_LCDC_VSYNC = 1,
    IOMUX_SEL_3C2_BT1120_D14 = 2,
    IOMUX_SEL_3C2_SPI1_MISOM1 = 3,
    IOMUX_SEL_3C2_UART5_TXM1 = 4,
    IOMUX_SEL_3C2_I2S1_SDO3M2 = 5,
    IOMUX_SEL_3C3_LCDC_DEN = 1,
    IOMUX_SEL_3C3_BT1120_D15 = 2,
    IOMUX_SEL_3C3_SPI1_CLKM1 = 3,
    IOMUX_SEL_3C3_UART5_RXM1 = 4,
    IOMUX_SEL_3C3_I2S1_SCLKRXM2 = 5,
    IOMUX_SEL_3C4_PWM14_M0 = 1,
    IOMUX_SEL_3C4_VOP_PWMM1 = 2,
    IOMUX_SEL_3C4_GMAC1_MDCM0 = 3,
    IOMUX_SEL_3C4_UART7_TXM1 = 4,
    IOMUX_SEL_3C4_PDM_CLK1M2 = 5,
    IOMUX_SEL_3C5_PWM15_M0 = 1,
    IOMUX_SEL_3C5_SPDIF_TXM1 = 2,
    IOMUX_SEL_3C5_GMAC1_MDIOM0 = 3,
    IOMUX_SEL_3C5_UART7_RXM1 = 4,
    IOMUX_SEL_3C5_I2S1_LRCKRXM2 = 5,
    IOMUX_SEL_3C6_CIF_D0 = 1,
    IOMUX_SEL_3C6_EBC_SDDO0 = 2,
    IOMUX_SEL_3C6_SDMMC2_D0M0 = 3,
    IOMUX_SEL_3C6_I2S1_MCLKM1 = 4,
    IOMUX_SEL_3C6_BT656_D0M1 = 5,
    IOMUX_SEL_3C7_CIF_D1 = 1,
    IOMUX_SEL_3C7_EBC_SDDO1 = 2,
    IOMUX_SEL_3C7_SDMMC2_D1M0 = 3,
    IOMUX_SEL_3C7_I2S1_SCLKTXM1 = 4,
    IOMUX_SEL_3C7_BT656_D1M1 = 5,

    /* GPIO3_D0-7 */
    IOMUX_SEL_3D0_CIF_D2 = 1,
    IOMUX_SEL_3D0_EBC_SDDO2 = 2,
    IOMUX_SEL_3D0_SDMMC2_D2M0 = 3,
    IOMUX_SEL_3D0_I2S1_LRCKTXM1 = 4,
    IOMUX_SEL_3D0_BT656_D2M1 = 5,
    IOMUX_SEL_3D1_CIF_D3 = 1,
    IOMUX_SEL_3D1_EBC_SDDO3 = 2,
    IOMUX_SEL_3D1_SDMMC2_D3M0 = 3,
    IOMUX_SEL_3D1_I2S1_SDO0M1 = 4,
    IOMUX_SEL_3D1_BT656_D3M1 = 5,
    IOMUX_SEL_3D2_CIF_D4 = 1,
    IOMUX_SEL_3D2_EBC_SDDO4 = 2,
    IOMUX_SEL_3D2_SDMMC2_CMDM0 = 3,
    IOMUX_SEL_3D2_I2S1_SDI0M1 = 4,
    IOMUX_SEL_3D2_BT656_D4M1 = 5,
    IOMUX_SEL_3D3_CIF_D5 = 1,
    IOMUX_SEL_3D3_EBC_SDDO5 = 2,
    IOMUX_SEL_3D3_SDMMC2_CLKM0 = 3,
    IOMUX_SEL_3D3_I2S1_SDI1M1 = 4,
    IOMUX_SEL_3D3_BT656_D5M1 = 5,
    IOMUX_SEL_3D4_CIF_D6 = 1,
    IOMUX_SEL_3D4_EBC_SDDO6 = 2,
    IOMUX_SEL_3D4_SDMMC2_DETM0 = 3,
    IOMUX_SEL_3D4_I2S1_SDI2M1 = 4,
    IOMUX_SEL_3D4_BT656_D6M1 = 5,
    IOMUX_SEL_3D5_CIF_D7 = 1,
    IOMUX_SEL_3D5_EBC_SDDO7 = 2,
    IOMUX_SEL_3D5_SDMMC2_PWRENM0 = 3,
    IOMUX_SEL_3D5_I2S1_SDI3M1 = 4,
    IOMUX_SEL_3D5_BT656_D7M1 = 5,
    IOMUX_SEL_3D6_CIF_D8 = 1,
    IOMUX_SEL_3D6_EBC_SDDO8 = 2,
    IOMUX_SEL_3D6_GMAC1_TXD2M1 = 3,
    IOMUX_SEL_3D6_UART1_TXM1 = 4,
    IOMUX_SEL_3D6_PDM_CLK0M1 = 5,
    IOMUX_SEL_3D7_CIF_D9 = 1,
    IOMUX_SEL_3D7_EBC_SDDO9 = 2,
    IOMUX_SEL_3D7_GMAC1_TXD3M1 = 3,
    IOMUX_SEL_3D7_UART1_RXM1 = 4,
    IOMUX_SEL_3D7_PDM_SDI0M1 = 5,

    /* GPIO4_A0-7 */
    IOMUX_SEL_4A0_CIF_D10 = 1,
    IOMUX_SEL_4A0_EBC_SDDO10 = 2,
    IOMUX_SEL_4A0_GMAC1_TXCLKM1 = 3,
    IOMUX_SEL_4A0_PDM_CLK1M1 = 4,
    IOMUX_SEL_4A1_CIF_D11 = 1,
    IOMUX_SEL_4A1_EBC_SDDO11 = 2,
    IOMUX_SEL_4A1_GMAC1_RXD2M1 = 3,
    IOMUX_SEL_4A1_PDM_SDI1M1 = 4,
    IOMUX_SEL_4A2_CIF_D12 = 1,
    IOMUX_SEL_4A2_EBC_SDDO12 = 2,
    IOMUX_SEL_4A2_GMAC1_RXD3M1 = 3,
    IOMUX_SEL_4A2_UART7_TXM2 = 4,
    IOMUX_SEL_4A2_PDM_SDI2M1 = 5,
    IOMUX_SEL_4A3_CIF_D13 = 1,
    IOMUX_SEL_4A3_EBC_SDDO13 = 2,
    IOMUX_SEL_4A3_GMAC1_RXCLKM1 = 3,
    IOMUX_SEL_4A3_UART7_RXM2 = 4,
    IOMUX_SEL_4A3_PDM_SDI3M1 = 5,
    IOMUX_SEL_4A4_CIF_D14 = 1,
    IOMUX_SEL_4A4_EBC_SDDO14 = 2,
    IOMUX_SEL_4A4_GMAC1_TXD0M1 = 3,
    IOMUX_SEL_4A4_UART9_TXM2 = 4,
    IOMUX_SEL_4A4_I2S2_LRCKTXM1 = 5,
    IOMUX_SEL_4A5_CIF_D15 = 1,
    IOMUX_SEL_4A5_EBC_SDDO15 = 2,
    IOMUX_SEL_4A5_GMAC1_TXD1M1 = 3,
    IOMUX_SEL_4A5_UART9_RXM2 = 4,
    IOMUX_SEL_4A5_I2S2_LRCKRXM1 = 5,
    IOMUX_SEL_4A6_ISP_FLASHTRIGOUT = 1,
    IOMUX_SEL_4A6_EBC_SDCE0 = 2,
    IOMUX_SEL_4A6_GMAC1_TXENM1 = 3,
    IOMUX_SEL_4A6_SPI3_CS0M0 = 4,
    IOMUX_SEL_4A6_I2S1_SCLKRXM1 = 5,
    IOMUX_SEL_4A7_CAM_CLKOUT0 = 1,
    IOMUX_SEL_4A7_EBC_SDCE1 = 2,
    IOMUX_SEL_4A7_GMAC1_RXD0M1 = 3,
    IOMUX_SEL_4A7_SPI3_CS1M0 = 4,
    IOMUX_SEL_4A7_I2S1_LRCKRXM1 = 5,

    /* GPIO4_B0-7 */
    IOMUX_SEL_4B0_CAM_CLKOUT1 = 1,
    IOMUX_SEL_4B0_EBC_SDCE2 = 2,
    IOMUX_SEL_4B0_GMAC1_RXD1M1 = 3,
    IOMUX_SEL_4B0_SPI3_MISOM0 = 4,
    IOMUX_SEL_4B0_I2S1_SDO1M1 = 5,
    IOMUX_SEL_4B1_ISP_PRELIGHTTRIG = 1,
    IOMUX_SEL_4B1_EBC_SDCE3 = 2,
    IOMUX_SEL_4B1_GMAC1_RXDVCRSM1 = 3,
    IOMUX_SEL_4B1_I2S1_SDO2M1 = 4,
    IOMUX_SEL_4B2_I2C4_SDAM0 = 1,
    IOMUX_SEL_4B2_EBC_VCOM = 2,
    IOMUX_SEL_4B2_GMAC1_RXERM1 = 3,
    IOMUX_SEL_4B2_SPI3_MOSIM0 = 4,
    IOMUX_SEL_4B2_I2S2_SDIM1 = 5,
    IOMUX_SEL_4B3_I2C4_SCLM0 = 1,
    IOMUX_SEL_4B3_EBC_GDOE = 2,
    IOMUX_SEL_4B3_ETH1_REFCLKO25MM1 = 3,
    IOMUX_SEL_4B3_SPI3_CLKM0 = 4,
    IOMUX_SEL_4B3_I2S2_SDOM1 = 5,
    IOMUX_SEL_4B4_I2C2_SDAM1 = 1,
    IOMUX_SEL_4B4_EBC_GDSP = 2,
    IOMUX_SEL_4B4_CAN2_RXM0 = 3,
    IOMUX_SEL_4B4_ISP_FLASHTRIGIN = 4,
    IOMUX_SEL_4B4_BT656_CLKM1 = 5,
    IOMUX_SEL_4B5_I2C2_SCLM1 = 1,
    IOMUX_SEL_4B5_EBC_SDSHR = 2,
    IOMUX_SEL_4B5_CAN2_TXM0 = 3,
    IOMUX_SEL_4B5_I2S1_SDO3M1 = 4,
    IOMUX_SEL_4B6_CIF_HREF = 1,
    IOMUX_SEL_4B6_EBC_SDLE = 2,
    IOMUX_SEL_4B6_GMAC1_MDCM1 = 3,
    IOMUX_SEL_4B6_UART1_RTSNM1 = 4,
    IOMUX_SEL_4B6_I2S2_MCLKM1 = 5,
    IOMUX_SEL_4B7_CIF_VSYNC = 1,
    IOMUX_SEL_4B7_EBC_SDOE = 2,
    IOMUX_SEL_4B7_GMAC1_MDIOM1 = 3,
    IOMUX_SEL_4B7_I2S2_SCLKTXM1 = 4,

    /* GPIO4_C0-7 */
    IOMUX_SEL_4C0_CIF_CLKOUT = 1,
    IOMUX_SEL_4C0_EBC_GDCLK = 2,
    IOMUX_SEL_4C0_PWM11_M1 = 3,
    IOMUX_SEL_4C1_CIF_CLKIN = 1,
    IOMUX_SEL_4C1_EBC_SDCLK = 2,
    IOMUX_SEL_4C1_GMAC1_MCLKINOUTM1 = 3,
    IOMUX_SEL_4C1_UART1_CTSNM1 = 4,
    IOMUX_SEL_4C1_I2S2_SCLKRXM1 = 5,
    IOMUX_SEL_4C2_PWM14_M1 = 1,
    IOMUX_SEL_4C2_SPI3_CLKM1 = 2,
    IOMUX_SEL_4C2_CAN1_RXM1 = 3,
    IOMUX_SEL_4C2_PCIE30X2_CLKREQNM2 = 4,
    IOMUX_SEL_4C2_I2S3_MCLKM1 = 5,
    IOMUX_SEL_4C3_PWM15_M1 = 1,
    IOMUX_SEL_4C3_SPI3_MOSIM1 = 2,
    IOMUX_SEL_4C3_CAN1_TXM1 = 3,
    IOMUX_SEL_4C3_PCIE30X2_WAKENM2 = 4,
    IOMUX_SEL_4C3_I2S3_SCLKM1 = 5,
    IOMUX_SEL_4C4_EDPDP_HPDINM0 = 1,
    IOMUX_SEL_4C4_SPDIF_TXM2 = 2,
    IOMUX_SEL_4C4_SATA2_ACTLED = 3,
    IOMUX_SEL_4C4_PCIE30X2_PERSTNM2 = 4,
    IOMUX_SEL_4C4_I2S3_LRCKM1 = 5,
    IOMUX_SEL_4C5_PWM12_M1 = 1,
    IOMUX_SEL_4C5_SPI3_MISOM1 = 2,
    IOMUX_SEL_4C5_SATA1_ACTLED = 3,
    IOMUX_SEL_4C5_UART9_TXM1 = 4,
    IOMUX_SEL_4C5_I2S3_SDOM1 = 5,
    IOMUX_SEL_4C6_PWM13_M1 = 1,
    IOMUX_SEL_4C6_SPI3_CS0M1 = 2,
    IOMUX_SEL_4C6_SATA0_ACTLED = 3,
    IOMUX_SEL_4C6_UART9_RXM1 = 4,
    IOMUX_SEL_4C6_I2S3_SDIM1 = 5,
    IOMUX_SEL_4C7_HDMITX_SCL = 1,
    IOMUX_SEL_4C7_I2C5_SCLM1 = 2,

    /* GPIO4_D0-2 */
    IOMUX_SEL_4D0_HDMITX_SDA = 1,
    IOMUX_SEL_4D0_I2C5_SDAM1 = 2,
    IOMUX_SEL_4D1_HDMITX_CECM0 = 1,
    IOMUX_SEL_4D1_SPI3_CS1M1 = 2,

};
typedef int gpio_iomux_sel_t;

int iomux_get_pull_mode(gpio_port_t port, gpio_pin_t pin, gpio_index_t index);
int iomux_set_pull_mode(gpio_port_t port, gpio_pin_t pin, gpio_index_t index, gpio_pull_mode_t pull_mode);

int iomux_get_drive_level(gpio_port_t port, gpio_pin_t pin, gpio_index_t index);
int iomux_set_drive_level(gpio_port_t port, gpio_pin_t pin, gpio_index_t index, gpio_drv_level_t level);

int iomux_get_speed(gpio_port_t port, gpio_pin_t pin, gpio_index_t index);
int iomux_set_speed(gpio_port_t port, gpio_pin_t pin, gpio_index_t index, gpio_speed_t speed);

int iomux_get_schmitt_trigger(gpio_port_t port, gpio_pin_t pin, gpio_index_t index);
int iomux_set_schmitt_trigger(gpio_port_t port, gpio_pin_t pin, gpio_index_t index, gpio_schmitt_trigger_t smt);

int iomux_set_open_drain_mode(gpio_port_t port, gpio_pin_t pin, gpio_index_t index, gpio_od_mode_t od);
int iomux_get_open_drain_mode(gpio_port_t port, gpio_pin_t pin, gpio_index_t index);

int iomux_get_iomux_sel(gpio_port_t port, gpio_pin_t pin, gpio_index_t index);
int iomux_set_iomux_sel(gpio_port_t port, gpio_pin_t pin, gpio_index_t index, gpio_iomux_sel_t iomux_sel);

int iomux_set_mode(gpio_port_t port, gpio_pin_t pin, gpio_index_t index, gpio_iomux_sel_t iomux_sel,
    gpio_pull_mode_t pull_mode, gpio_drv_level_t level, gpio_speed_t speed, gpio_schmitt_trigger_t smt,
    gpio_od_mode_t od);

#endif /* __IOMUX_H__ */
